#include  <iostream>
#include  <signal.h>
#include  <sys/types.h>
#include  <sys/wait.h>
#include  <unistd.h>

void PrintPending(sigset_t &pendset)
{
    printf("本进程pid: %d, ", getpid());

    std::cout << "pending: " ;
    for(int i = 64; i >= 1; i--)
    {
        if(sigismember(&pendset, i))
        {
            std::cout << "1";
        }
        else
        {
            std::cout << "0";
        }
    }

    std::cout << std::endl;
}

int main()
{
    //初始化新老位图
    sigset_t  newset, oldset;
    sigemptyset(&newset);
    sigemptyset(&oldset);

    //设置block位图，并屏蔽40号、2号信号
    sigaddset(&newset, SIGINT);
    sigaddset(&newset, 40);
    int ret = sigprocmask(SIG_SETMASK, &newset, &oldset);//装入进程

    //查看进程pending位图
    while(1)
    {
        //初始化pending位图
        sigset_t  pendset;
        sigemptyset(&pendset);

        //查看进程pending位图
        sigpending(&pendset);
        
        PrintPending(pendset);//打印pending位图

        sleep(1);
    }

    return 0;
}

